package jobs

import (
	"cm2/exception"
	"cm2/service/task/tasks"
	"fmt"
)

// Job 用于描述指导一系列Job组合成的工作流
type Job struct {
	Serial string
	SId    string
	Code   string
	Name   string
	Tasks  []tasks.Taskprovider
}

// JobConv 用于客户端的解析
type JobConv struct {
	Serial string
	SId    string
	Code   string
	Name   string
	Tasks  []*tasks.Task
}

// Jobprovider Tob任务执行
type Jobprovider interface {
	InnerJob() Job
	ResolveJob(params map[string]interface{}) ([]tasks.Taskprovider, *exception.Exception)
}

// SIdPrefix 统一 task sid 的前缀
func SIdPrefix(sid string) string {
	return fmt.Sprintf("__JOB_%s", sid)
}

// DefaultJobs 默认job provider 集合
func DefaultJobs() map[string]Jobprovider {
	m := make(map[string]Jobprovider)

	var tpkg Jobprovider

	// 部署站点
	tpkg = NewDeployWebSite()
	m[tpkg.InnerJob().SId] = tpkg

	return m
}
